iT邦幫忙

2024 iThome 鐵人賽

DAY 0
1
自我挑戰組

重新開始 elasticsearch 系列 第 9

2024 鐵人賽 Day10: Search Query II

  • 分享至 

  • xImage
  •  

因為 elasticsearch 要打很多字,寫文苦手如我決定縮寫它,所以會用 ES 代稱。

前一篇提到 ES 大致可以區分四種 query,這一篇來說明其中的 term-level query。

term-level query 需要搜尋詞與索引的內容完全一致才算符合,主要的使用情境是拿來搜尋關鍵字,例如商品的分類、品牌、id 、價格或名稱等資訊。

雖然說是『內容完全一致』但其實也提供了 fuzzy search、wildcard search、regex 等功能,可以想像是一般 RDB 的 where 子句中篩選條件的感覺。

以下是一個簡單的 term query 範例

# create index
PUT term_level_search_001
{
  "mappings": {
    "properties": {
      "user":{
        "type": "keyword"
      }
    }
  }
}

# insert document
PUT term_level_search_001/_doc/1
{
  "user": "Kim Cheng"
}

# search with term query
## 這個 query 不會 match 因為 term query 需要完全 match 
GET term_level_search_001/_search
{
  "query": {
    "term": {
      "user": "Kim"
    }
  }
}

## 這個 query 會 match
GET term_level_search_001/_search
{
  "query": {
    "term": {
      "user": "Kim Cheng"
    }
  }
}
  • 試試看 fuzzy search

GET term_level_search_001/_search
{
  "query": {
    "fuzzy": {
      "user": {
        "value": "Kim Che",
        "fuzziness": "AUTO",
        "prefix_length": 3
      }
    }
  }
}

除了文字搜尋之外,也可以搜尋數字或日期。

# create index
PUT term_level_search_002
{
  "mappings": {
    "properties": {
      "session_count":{
        "type": "integer"
      },
      "visit_date": {
	      "type": "date"
      }
    }
  }
}

# insert documents
PUT term_level_search_002/_doc/1
{
  "session_count": 10, "date": "2024-03-01"
}
PUT term_level_search_002/_doc/2
{
  "session_count": 5, "date": "2024-05-16"
}
PUT term_level_search_002/_doc/2
{
  "session_count": 1, "date": "2023-07-01"
}

# search with term query
GET term_level_search_002/_search
{
  "query": {
    "term": {
      "session_count": 1
    }
  }
}

除了單一值的搜尋,也可以使用 ragne query 搜尋區間:

GET term_level_search_002/_search
{
  "query": {
    "**range**": {
      "date": {
        "gte": "now-60d/d",
        "lte": "now/d"
      }
    }
  }
}

如果你有使用過 Mongo,應該會覺得非常的熟悉,這些語法使用上大同小異,ES 的官方文件也寫得非常清楚,所以就不再多講了。

下一篇會繼續說明 search query 相關的內容。


上一篇
2024 鐵人賽 Day9: Search Query I
下一篇
2024 鐵人賽 Day11: Search Query III
系列文
重新開始 elasticsearch 29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言